一、读取数据集

二、主训练集探索

1. 数据探索

缺失值检测

数据一共有122列,有67列存在缺失情况,最高缺失值的列缺失度为69.9%

异常值探索

对主训练集进行异常值的探索,采取描述统计的方法

查看用户年龄的数据分布情况, 最大年龄69岁,最小年龄20岁,没有异常

查看用户的工作时间分布情况, 这里的-1000年明显是一个异常数据

查看用户受工作时间的数据分布情况,发现所有的异常值都是一个值,365243,它可能是代表缺失值,所以将这个异常值用空值去替换

违约用户画像探索

查看违约用户和非违约用户的特征分布情况

查看男性和女性用户的违约率情况,发现男性用户违约率更高,男性用户违约率为10%,女性为7%

违约用户年轻用户分布更多,所以推断的结论是用户年龄越小,违约的可能性越大

进一步观察观察不同年龄段用户的违约概率,发现确实是用户年龄越小,违约的可能性越高

查看现金贷款和流动资金循坏贷款,现金贷款的违约率更高

用户有没有房和车对违约率的影响,发现没有车和房的人违约率更高,但相差并不是很大

从家庭情况看,申请的用户大多已经结婚,单身和世俗结婚的违约率较高,寡居的违约率最低

子女信息,大部分申请者没有孩子或孩子在3个以下,孩子越多的家庭违约率越高,发现对于有9、11个孩子的家庭违约率达到了100%

根据申请者的收入类型区分,可以发现休产假和没有工作的人违约率较高,在35%以上,对于这两类人群放款需较为谨慎

从职业来看,越相对收入较低、不稳定的职业违约率越高,比如低廉劳动力、司机、理发师,而像会计、高科技员工等具有稳定高收入的职业违约率就较低

贷款申请人受教育程度大多为中学,学历越低越容易违约

2.特征工程

通过对特征的一些理解,尝试做出一些新的特征

  1. CREDIT_INCOME_PERCENT: 贷款金额/客户收入,预期是这个比值越大,说明贷款金额大于用户的收入,用户违约的可能性就越大

  2. ANNUITY_INCOME_PERCENT: 贷款的每年还款金额/客户收入,逻辑与上面一致

  3. CREDIT_TERM: 贷款的每年还款金额/贷款金额,贷款的还款周期,猜测还款周期短的贷款,用户的短期压力可能会比较大,违约概率高

  4. DAYS_EMPLOYED_PERCENT: 用户工作时间/用户年龄

  5. INCOME_PER_CHILD:客户收入/孩子数量,客户的收入平均到每个孩子身上,同样的收入,如果这个人的家庭很大,孩子很多,那么他的负担可能比较重,违约的可能性可能更高

  6. HAS_HOUSE_INFORMATION : 根据客户是否有缺失房屋信息设计一个二分类特征,如果未缺失的话是1,缺失的是0

放到模型中再看一下效果

缺失房屋信息的用户违约概率要明显高于未缺失用户

对测试集做同样的处理

3.建模预测

通过lgb自带的函数查看特征的重要性

三、利用其他数据集信息

从这些辅助训练集中提取出一些信息把它们作为新的特征加入到主训练集中

读取信用局信息

针对每个贷款申请人计算他们在其他金融机构历史上的贷款数量

再把计算出来的统计特征和主训练集做left join

查看违约和非违约用户previous_loan_counts的统计属性发现,虽然非违约用户的平均贷款申请数量要略多于违约用户,但差异很小

定义一个查看分布的函数,再做出新特征时,可以快速查看新的特征在违约用户和非违约用户中的分布情况

连续型变量特征提取

对于连续型变量,采用计算它们的统计值来作为特征

对每一列重新命名

同样把新制作的特征和主数据集进行left join

上面一口气制作了大量统计特征,同样,需要去考察一下它们对模型预测的能力,如果再像之前一个个的去查看分布的话会比较麻烦,可以查看这些特征和Y值的相关性系数来做一个快速的判断

输出相关性绝对值前15的特征,可以看到DAYS_CREDIT_MEAN与Y值的正相关性最强,即申请人在信用局开户的平均历史天数,因为数据集中这个值是负数,所以含义其实是用户的开户时间越长,历史信用记录的时间越久越不容易违约

有一定区分度

为了能快速把上面计算连续型变量特征的方法应用到其他数据集中,定义一个函数来完成上面所有的步骤

同样再定义一个相关性计算函数

离散型变量特征提取

首先先把数据集中的离散特征变成哑变量

然后求总数和均值

重新更改一下列名

做好的特征可以合并到主训练集中

对离散型变量的特征提取步骤定义为一个函数

整合所有数据集

重新读取一遍数据集,把数据集还原到初始状态

把之前对主训练集做的特征重新加入到数据集

两个函数完成之前对信用局数据中连续变量和离散变量的特征提取

给训练集和测试集增加信用局相关特征

特征筛选

排除一些具有共线性的特征以提高模型的效果, 计算变量与变量之间的相关系数,来快速移除一些相关性过高的变量,定义一个阈值是0.8

一共要移除189列具有高相关性的变量

训练集和测试集都移除对应的列,把列数降低到426

建模预测